package com.gopay.common.cps.service.fund;

import com.gopay.common.domain.cps.CpsGenMainOrder;
import com.gopay.common.domain.cps.CpsGenPayOrder;
import com.gopay.common.domain.fund.FundGopayBankcardInfoEntity;
import com.gopay.common.domain.fund.FundGopayCardEntity;
import com.gopay.common.domain.fund.FundGopayCpsGenOrder;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author baiyunpeng
 * @2016年7月14日 下午3:36:05  www.gopay.com.cn Inc.All rights reserved.
 */
public interface BindCardBaseService {

    /**
     * 获取bean
     * @param object
     * @return
     */
    Object get(Object object);
    /**
     * 更新卡
     * @param agentSignNo
     * @param type
     * @param key
     * @return
     */
    Integer updateCard(Serializable agentSignNo, Serializable type,String key);
    /**
     * 更新卡信息
     * @param agentSignNo
     * @param type
     * @param key
     * @return
     */
    Integer updateCardInfo(Serializable agentSignNo, Serializable type, String key);
    /**
     * 查找bean
     * @param agentSignNo
     * @param merid
     * @param type
     * @return
     */
    Object find(Serializable agentSignNo,Serializable merid,Serializable type);
    /**
     * 更新流水表中的卡信息
     * @param cardNo
     * @param bankCode
     * @param mobile
     * @param seq
     * @param memo
     * @param date
     * @return
     */
    Integer updateDtlForCardInfo(Serializable cardNo, Serializable bankCode, Serializable mobile, Serializable seq, Serializable memo,Date date);
    /**
     * 查询卡信息表
     * @param id
     * @param agenSignNo
     * @return
     */
    FundGopayBankcardInfoEntity getEntity(String id, String agenSignNo);
    /**
     * 绑卡事务
     * @param fundGopayBankcardInfoEntity
     * @param fundGopayCardEntity
     * @return
     */
     void saveOrder( FundGopayBankcardInfoEntity fundGopayBankcardInfoEntity,  FundGopayCardEntity fundGopayCardEntity);
    /**
     * 解卡事务
     * @param
     *
     * @param fundGopayCardEntity
     */
    void unBindCard(final FundGopayBankcardInfoEntity fundGopayBankcardInfoEntity, FundGopayCardEntity fundGopayCardEntity);
    /**
     * 批量生成订单和其附属表
     * 查的时候用交易时间去查
     * @param orderList
     */
    void saveZeroOrder( final List<FundGopayCpsGenOrder> orderList, final List<CpsGenMainOrder> mainOrderList);
    /**
     * 更新赎回订单
     * @param orderList
     * @param mainOrderList
     * @param cpsGenPayOrderList
     * @param map
     * @param key
     */
     void saveThreeOrder( final List<FundGopayCpsGenOrder> orderList, final List<CpsGenMainOrder> mainOrderList, final List<CpsGenPayOrder> cpsGenPayOrderList, final Map<String,Object> map,  final String key);
    /**
     * 更新成功订货根据差异文件
     * @param maps
     */
    void updateSuccessOrderCauseDiffer( Map<String, Map<String,Object>> maps);
    /**
     * 更新订单根据差异文件
     * @param toatlMap
     */
    void updateFailOrderCauseDiffer(Map<String, Map<String, Object>> toatlMap);
    /**
     * 检查金额
     * @param maps
     * @return
     */
    boolean checkerMoney(Map<String, Object> maps);
    /**
     * 更新卡
     * @param fundGopayCardEntity
     * @param fundGopayBankcardInfoEntity
     */
    void updateCardByBind(FundGopayCardEntity fundGopayCardEntity, FundGopayBankcardInfoEntity fundGopayBankcardInfoEntity);
    /**
     * 根据条件查询基金支付绑卡信息
     * agentSignNo-签约协议号，merchantId-基金公司在国付宝的客户号，cardNo-卡号加密后的查询数据列表，type-业务类型（0-绑卡，1-解卡）
     * @param param
     * @return
     */
    List<FundGopayCardEntity> getBindCard(Map<String, Object> param);
}
